﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BorisTheBlade
{
	///<summary>
	/// <summary>
	/// Содержит информацию о позициях по деньгам. 
	/// Каждая группа позиций по деньгам представлена в таблице одной строкой. 
	/// Доступность полей отмечена в колонке Сервер: 
	/// m – MICEX; f – MICEX_FUT; r – RTS; s – SPBEX_FUT, SPBEX_OPT; пустое поле – все типы серверов 
	///<summary>

	class WrapperPositions
	{

		private int m_ClientID;
		///<summary>
		/// Идентификатор клиента
		/// </summary>
		public int ClientID {get {return m_ClientID;} set {m_ClientID = value;}}

		private string m_TrdAccID;
		///<summary>
		///Код торгового счета
		///</summary>
		public string TrdAccID { get { return m_TrdAccID; } set { m_TrdAccID = value; } }

		private double m_OpenBal;
		///<summary>
		///m, r	Входящий остаток – остаток денежных средств на счете клиента
		/// </summary>
		public double OpenBal { get { return m_OpenBal; } set { m_OpenBal = value; } }

		private double m_CurrentPos;
		///<summary>
		///m, r	Текущий остаток – входящий остаток плюс суммарный объем заключенных клиентом сделок на продажу минус суммарный объем сделок на покупку 
		/// </summary>
		public double CurrentPos { get { return m_CurrentPos; } set { m_CurrentPos = value; } }

		private double m_PlannedPos;
		///<summary>
		///m, r	Плановый остаток – текущий остаток по деньгам минус суммарный неудовлетворенный объём всех активных заявок на покупку (CurrentPos – OrderBuy). Объемы заявок рассчитываются с учетом комиссионного сбора и накопленного купонного дохода
		/// </summary>
		public double PlannedPos { get { return m_PlannedPos; } set { m_PlannedPos = value; } }

		private double m_OrderBuy;
		///<summary>
		///m, r	Объём активных заявок на покупку – суммарный неудовлетворенный объём всех активных заявок на покупку, выраженный в рублях. Объем заявки в денежном выражении рассчитывается с учетом комиссионного сбора и накопленного купонного дохода
		/// </summary>
		public double OrderBuy { get { return m_OrderBuy; } set { m_OrderBuy = value; } }

		private double m_OrderSell;
		///<summary>
		///m, r	Объём активных заявок на продажу – суммарный неудовлетворенный объём всех активных заявок на продажу, выраженный в рублях. Объем заявки в денежном выражении рассчитывается с учетом комиссионного сбора и накопленного купонного дохода
		///</summary>
		public double OrderSell { get { return m_OrderSell; } set { m_OrderSell = value; } }

		private double m_Netto;
		///<summary>
		///m, r	Нетто позиция – текущий остаток плюс объём активных заявок на продажу и минус объём активных заявок на покупку (CurrentPos + OrderSell – OrderBuy)
		///</summary>
		public double Netto { get { return m_Netto; } set { m_Netto = value; } }

		private double m_Portfolio;
		///<summary>
		///m, r	Расчетное значение портфеля по текущему курсу, в рублях
		///</summary>
		public double Portfolio { get { return m_Portfolio; } set { m_Portfolio = value; } }

		private double m_Value;
		///<summary>
		///m, r	Суммарный объем в сделках за текущую торговую сессию, в рублях
		///</summary>
		public double Value { get { return m_Value; } set { m_Value = value; } }

		private double m_Commission;
		///<summary>
		///m, r, s	Биржевой сбор, в рублях
		///</summary>
		public double Commission { get { return m_Commission; } set { m_Commission = value; } }

		private double m_Commission2;
		///<summary>
		///m, r	Комиссия брокера, в рублях
		///</summary>
		public double Commission2 { get { return m_Commission2; } set { m_Commission2 = value; } }

		private double m_PlannedCommission;
		///<summary>
		///m, r	Планируемый биржевой сбор (учитываются выставленные заявки), в рублях
		///</summary>
		public double PlannedCommission { get { return m_PlannedCommission; } set { m_PlannedCommission = value; } }

		private double m_PlannedCommission2;
		///<summary>
		///m, r	Планируемая комиссия брокера (учитываются выставленные заявки), в рублях
		///</summary>
		public double PlannedCommission2 { get { return m_PlannedCommission2; } set { m_PlannedCommission2 = value; } }

		private double m_Profit;
		///<summary>
		///m, r	Доход, в рублях
		///</summary>
		public double Profit { get { return m_Profit; } set { m_Profit = value; } }

		private double m_Free;
		///<summary>
		///m, r	Свободные средства
		///</summary>
		public double Free { get { return m_Free; } set { m_Free = value; } }

		private double m_FreeForShorting;
		///<summary>
		///m, r	Расчетное значение свободных средств для коротких продаж, в рублях
		///</summary>
		public double FreeForShorting { get { return m_FreeForShorting; } set { m_FreeForShorting = value; } }

		private double m_FreeForMargin;
		///<summary>
		///m, r	Расчетное значение свободных средств для покупок маржинальных бумаг, в рублях
		///</summary>
		public double FreeForMargin { get { return m_FreeForMargin; } set { m_FreeForMargin = value; } }

		private double m_FreeForNonMargin;
		///<summary>
		///m, r	Расчетное значение свободных средств для покупок немаржинальных бумаг, в рублях
		///</summary>
		public double FreeForNonMargin { get { return m_FreeForNonMargin; } set { m_FreeForNonMargin = value; } }

		private double m_MarginLevel;
		///<summary>
		///Текущий уровень маржи
		///</summary>
		public double MarginLevel { get { return m_MarginLevel; } set { m_MarginLevel = value; } }

		private double m_MarginLevelPlanned;
		///<summary>
		///Планируемый уровень маржи (с учетом выставленных заявок)
		///</summary>
		public double MarginLevelPlanned { get { return m_MarginLevelPlanned; } set { m_MarginLevelPlanned = value; } }

		private string m_FirmID;
		///<summary>
		///Идентификатор фирмы
		///</summary>
		public string FirmID { get { return m_FirmID; } set { m_FirmID = value; } }

		private string m_CurrCode;
		///<summary>
		///Код валюты
		///</summary>
		public string CurrCode { get { return m_CurrCode; } set { m_CurrCode = value; } }

		private string m_Tag;
		///<summary>
		///Код позиции
		///</summary>
		public string Tag { get { return m_Tag; } set { m_Tag = value; } }

		private string m_BankAccID;
		///<summary>
		///Идентификатор счета в расчетной палате
		///</summary>
		public string BankAccID { get { return m_BankAccID; } set { m_BankAccID = value; } }

		private string m_Description;
		///<summary>
		///Описание
		///</summary>
		public string Description { get { return m_Description; } set { m_Description = value; } }

		private bool m_MarginTrading;
		///<summary>
		///m, r	Флаг, разрешающий маржинальные операции в режиме "плеча"
		///</summary>
		public bool MarginTrading { get { return m_MarginTrading; } set { m_MarginTrading = value; } }

		private bool m_UseMarginLevel;
		///<summary>
		///m, r	Флаг, разрешающий маржинальные операции в режиме контроля уровня маржи
		///</summary>
		public bool UseMarginLevel { get { return m_UseMarginLevel; } set { m_UseMarginLevel = value; } }

		private string m_AccCode;
		///<summary>
		///	s	Код счета ("0" – деньги, "1" – залоги)
		///	</summary>
		public string AccCode { get { return m_AccCode; } set { m_AccCode = value; } }

		private double m_LiquidityRate;
		///<summary>
		///s	Коэффициент ликвидности
		///</summary>
		public double LiquidityRate { get { return m_LiquidityRate; } set { m_LiquidityRate = value; } }

		private double m_GuaranteeFactor;
		///<summary>
		///s	Коэффициент клиентского гарантийного обеспечения
		///</summary>
		public double GuaranteeFactor { get { return m_GuaranteeFactor; } set { m_GuaranteeFactor = value; } }

		private double m_PrevLimit;
		///<summary>
		///s	Лимит на конец предыдущей торговой сессии, в рублях
		///</summary>
		public double PrevLimit { get { return m_PrevLimit; } set { m_PrevLimit = value; } }

		private double m_CBPLimit;
		///<summary>
		///s, f	Текущий лимит, в рублях
		///</summary>
		public double CBPLimit { get { return m_CBPLimit; } set { m_CBPLimit = value; } }

		private double m_CBPLUsed;
		///<summary>
		///s, f	Стоимостная оценка текущих чистых позиций, в рублях
		///</summary>
		public double CBPLUsed { get { return m_CBPLUsed; } set { m_CBPLUsed = value; } }

		private double m_CBPPlanned;
		///<summary>
		///s, f	Стоимостная оценка планируемых чистых позиций, в рублях
		///</summary>
		public double CBPPlanned { get { return m_CBPPlanned; } set { m_CBPPlanned = value; } }

		private double m_Reserved;
		///<summary>
		///s	Зарезервировано под позиции и заявки, в рублях
		///</summary>
		public double Reserved { get { return m_Reserved; } set { m_Reserved = value; } }

		private double m_Surplus;
		///<summary>
		///s	Накопленный доход на клиентском счете, в рублях
		///</summary>
		public double Surplus { get { return m_Surplus; } set { m_Surplus = value; } }

		private double m_VarMargin;
		///<summary>
		///Накопленная по сделкам вариационная маржа, рассчитанная по текущей котировке, в рублях
		///</summary>
		public double VarMargin { get { return m_VarMargin; } set { m_VarMargin = value; } }

		private double m_VarMarginOpt;
		///<summary>
		///s	Накопленная по сделкам вариационная маржа по маржируемым опционам, рассчитанная по текущей котировке, в рублях
		///</summary>
		public double VarMarginOpt { get { return m_VarMarginOpt; } set { m_VarMarginOpt = value; } }

		private double m_VarMarginReal;
		///<summary>
		///s	Накопленная по сделкам вариационная маржа, рассчитанная по текущей рыночной котировке, в рублях
		///</summary>
		public double VarMarginReal { get { return m_VarMarginReal; } set { m_VarMarginReal = value; } }

	}
}
